<html manifest="obsoletingManifest.sjs">
<head>
<title>obsolete test</title>
<script type="text/javascript">

function obsolete(evt)
{
  window.opener.ok(true, "Got an 'obsolete' event");

  // The cache status is switched immediately AFTER sending the event,
  // make sure that it isn't OBSOLETE yet...
  window.opener.isnot(applicationCache.status, 5,
                      "Status should not yet be 5 (obsolete)");

  // But check that it is after the event is fired.
  setTimeout(function(){
    window.opener.is(applicationCache.status, 5,
                     "Status should be 5 (obsolete)");

    // Now swapCache(), and our new status should be UNCACHED.
    applicationCache.swapCache();
    window.opener.is(applicationCache.status, 0,
                     "Status should be 0 (UNCACHED)");
    window.opener.finish();
  }, 0);
}

function fail(evt)
{
  window.opener.ok(false, "Got an unexpected event: " + evt.type)
  window.opener.finish();
}

applicationCache.oncached = function() {
  // ok, we've successfully loaded from the initial cache.
  try {
    applicationCache.swapCache();
    window.opener.todo(false, "We shouldn't have to swapCache in the oncached handler (bug 443023)");
  } catch(e) {
  }

  // Now delete the manifest and refresh, we should get an "obsolete" message.
  applicationCache.oncached = fail;
  applicationCache.onupdateready = fail;
  applicationCache.onnoupdate = fail;
  applicationCache.onerror = fail;
  applicationCache.onobsolete = obsolete;

  // Make the obsoleting.sjs return 404 NOT FOUND code
  var req = new XMLHttpRequest();
  req.open("GET", "http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/obsoletingManifest.sjs?state=");
  var channel = SpecialPowers.wrap(req).channel
    .QueryInterface(SpecialPowers.Ci.nsIApplicationCacheChannel);
  channel.chooseApplicationCache = false;
  channel.inheritApplicationCache = false;
  req.send("");
  req.onreadystatechange = function() {
    if (req.readyState == 4) {
      applicationCache.update();
    }
  }
}

</script>
</head>

<body>
<h1></h1>
</body> </html>
